<?php

namespace app\common\model;

use app\common\validate\ArticleValidate;
use think\Model;
use think\model\concern\SoftDelete;

// 文章模型
class Article extends Model
{
    // 软删除
    use SoftDelete;

    // 关联栏目表
    public function category()
    {
        return $this->belongsTo('Category', 'cate_id', 'id');
    }

    // 关联评论
    public function comments()
    {
        return $this->hasMany('Comment', 'article_id', 'id');
    }

    // 添加文章方法
    public function add($data)
    {
        $validate = new ArticleValidate();
        if (!$validate->scene('addart')->check($data)) {
            return $validate->getError();
        }
        $result = $this->allowField(true)->save($data);
        if ($result > 0) {
            return 1;
        } else {
            return '添加文章失败';
        }
    }

    // 文章置顶（推荐）
    public function top($data)
    {
        $validate = new ArticleValidate();
        if (!$validate->scene('top')->check($data)) {
            return $this->getError();
        }
        $article_info = $this->find($data['id']);
        if (!$article_info) {
            // 抛出404异常
            abort(404, '该文章未找到');
        }
        $article_info->is_top = $data['is_top'];
        $result = $article_info->save();
        if ($result) {
            return 1;
        } else {
            return '操作失败';
        }
    }


    // 文章编辑
    public function edit($data)
    {
        $validate = new ArticleValidate();
        if (!$validate->scene('editart')->check($data)) {
            return $validate->getError();
        }
        $article_info = $this->where('id', $data['id'])->find();
        if (!$article_info) {
            abort('404', '该文章未找到');
        }

//        // 方法一，逐一赋值后save
//        $article_info->title = $data['title'];
//        $article_info->flag = $data['flag'];
//        $article_info->cate_id = $data['cate_id'];
//        $article_info->tags = $data['tags'];
//        $article_info->is_top = $data['is_top'];
//        $article_info->desc = $data['desc'];
//        $article_info->content = $data['content'];
//
//        $result = $article_info->save();

        //方法二, update数据库方法
        $result = $article_info->where('id', $data['id'])->update($data);
//        // 方法三，save直接更新
//        $article_info->allowField(true)->save($data, ['id' => $data['id']]);

        if ($result) {
            return 1;
        } else {
            return '编辑文章失败';
        }
    }
}
